package com.fla.millioner.ui;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import com.danikula.aibolit.Aibolit;
import com.danikula.aibolit.annotation.InjectOnClickListener;
import com.danikula.aibolit.annotation.InjectView;
import com.fla.millioner.ui.HelpUtils.AnswerModel;
import com.alone1672.millioner.R;

import android.app.Dialog;
import android.content.Context;
import android.view.View;
import android.widget.TextView;

public class CallDialog extends Dialog {
    private final static List<String> MESSAGE_90 = new ArrayList<String>() {
        {
            add("Я уверен с вероятностью '%s%%', что ответ: '%s'");
            add("Зуб даю! что с вероятностью '%s%%' ответ: '%s'");
            add("Без сомнения, с вероятностью '%s%%' это: '%s'");
        }
    };

    private final static List<String> MESSAGE_80 = new ArrayList<String>() {
        {
            add("Я почти уверен! С вероятностью '%s%%' ответ: '%s'");
            add("Вероятнее всего ('%s%%') ответ: '%s'");
            add("Ну почти точно, с вероятностью '%s%%' это: '%s'");
        }
    };

    private final static List<String> MESSAGE_50 = new ArrayList<String>() {
        {
            add("Пожалуй... с вероятностью '%s%%' ответ: '%s'");
            add("Мне кажется, что с вероятностью '%s%%' ответ: '%s'");
            add("Возможно (с вероятностью '%s%%') ответ: '%s'");
        }
    };

    private final static List<String> MESSAGE_NO = new ArrayList<String>() {
        {
            add("Откуда ж мне знать...мы такого не проходили в школе");
            add("В голове что-то вертится, но не буду врать - не знаю");
            add("Ты так неожиданно позвонил, что я забыл всё, что знал!");
        }
    };

    @InjectView(R.id.textView)
    private TextView textView;

    public CallDialog(Context context, int level, AnswerModel[] answerModels) {
        super(context);

        setTitle("Звонок другу");
        Aibolit.setInjectedContentView(this, R.layout.call_dialog);

        bindPercents(HelpUtils.calculatePercents(level, answerModels), answerModels);
    }

    private void bindPercents(int[] percents, AnswerModel[] answerModels) {
        int correctIndex = 0;
        int randomVisibleIndex = 0;

        List<Integer> visibleIndexes = new ArrayList<Integer>();
        for (int i = 0; i < answerModels.length; i++) {
            if (answerModels[i].isCorrect) {
                correctIndex = i;
                continue;
            }
            if (answerModels[i].isVisible) {
                visibleIndexes.add(i);
            }
        }
        Collections.shuffle(visibleIndexes);

        randomVisibleIndex = visibleIndexes.get(0);

        int randomMessageIndex = (int) (Math.round(Math.random() * 2));
        int correctPercent = percents[correctIndex];

        String template = "";
        String answer = "";
        int probability = 0;
        if (correctPercent >= 90) {
            template = MESSAGE_90.get(randomMessageIndex);
            answer = answerModels[correctIndex].answerText;
            probability = correctPercent;
        }
        else if (correctPercent >= 80) {
            template = MESSAGE_80.get(randomMessageIndex);
            answer = answerModels[correctIndex].answerText;
            probability = correctPercent;
        }
        else if (correctPercent >= 25) {
            template = MESSAGE_50.get(randomMessageIndex);
            answer = answerModels[correctIndex].answerText;
            probability = correctPercent;
        }
        else if (correctPercent >= 10) {
            template = MESSAGE_50.get(randomMessageIndex);
            answer = answerModels[Math.random() < correctPercent / 100d ? correctIndex : randomVisibleIndex].answerText;
            probability = correctPercent;
        }
        else {
            template = MESSAGE_NO.get(randomMessageIndex);
        }

        textView.setText(String.format(template, probability, answer));
    }

    @InjectOnClickListener(R.id.okButton)
    private void onOkClicked(View view) {
        dismiss();
    }
}
